package com.houtai.service.role;


import com.houtai.base.RetInfo;
import com.houtai.bean.TsJzAdmin;
import com.houtai.bean.TsJzFuncroleRel;
import com.houtai.bean.TsJzRole;
import com.houtai.common.util.LogUtils;
import com.houtai.dao.TsJzAdminOperationDao;
import com.houtai.dao.TsJzFuncroleRelDao;
import com.houtai.dao.TsJzRoleDao;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by lizhun on 2017/4/22.
 */
@Service
public class RoleService {
    private static Logger logger = Logger.getLogger(RoleService.class);
    @Autowired
    private TsJzRoleDao tsJzRoleDao;
    @Autowired
    private TsJzFuncroleRelDao tsJzFuncroleRelDao;
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private TsJzAdminOperationDao tsJzAdminOperationDao;


    public RetInfo insertRole(TsJzAdmin tsJzAdmin, TsJzRole tsJzRole , HttpServletRequest request) {
        String logInfo = this.getClass().getName() + ":insertRole:";
        // 类路径+方法名
        logger.info("======" + logInfo + "begin======");
        RetInfo retInfo = new RetInfo();
        try {
            //添加角色
            int role_id = tsJzRoleDao.findMaxRoleId();
            tsJzRole.setRole_id(role_id + 1);
            tsJzRole.setCreater(tsJzAdmin.getUser_name());
            tsJzRole.setIs_valid(0);
            tsJzRoleDao.insertRole(tsJzRole);
            //添加角色权限
            for (int a = 0 ; a < tsJzRole.getFunctions().length ; a++) {
                TsJzFuncroleRel tsJzFuncroleRel = new TsJzFuncroleRel();
                tsJzFuncroleRel.setCreater(tsJzAdmin.getUser_name());
                tsJzFuncroleRel.setFunc_id(tsJzRole.getFunctions()[a] + "");
                tsJzFuncroleRel.setIs_valid("0");
                tsJzFuncroleRel.setRole_id(tsJzRole.getRole_id() + "");
                tsJzFuncroleRelDao.insertFuncroleRel(tsJzFuncroleRel);
            }
            retInfo.setMark("0");
            retInfo.setTip("成功");
            LogUtils.AdminOperation(redisTemplate ,tsJzAdminOperationDao,"添加角色" + tsJzRole.getRole_name() , request);
        } catch (Exception e) {
            retInfo.setMark("-1");
            retInfo.setTip("出错了");
            logger.error("======error:" + e.toString() + "======");
            throw new RuntimeException();
        }
        logger.info("======" + logInfo + "end======");
        return retInfo;
    }


    public RetInfo updateRole(TsJzAdmin tsJzAdmin, TsJzRole tsJzRole , HttpServletRequest request) {
        String logInfo = this.getClass().getName() + ":updateRole:";
        // 类路径+方法名
        logger.info("======" + logInfo + "begin======");
        RetInfo retInfo = new RetInfo();
        try {
            //修改角色
            tsJzRoleDao.updateRole(tsJzRole);
            //修改角色权限全为不可用
            tsJzFuncroleRelDao.updateFuncroleRelByRoleId(tsJzRole.getRole_id());
            //循环添加角色 先判断是否存在存在改为可用不存在添加
            //添加角色权限
            Map<String,Integer> map = new HashMap<>();
            map.put("role_id", tsJzRole.getRole_id());
            for (int a = 0; a < tsJzRole.getFunctions().length; a++) {
                map.put("func_id", tsJzRole.getFunctions()[a]);
                TsJzFuncroleRel tsJzFuncroleRel = tsJzFuncroleRelDao.findFuncroleRelByRoleIdAndFuncId(map);
                if (tsJzFuncroleRel != null) {
                    tsJzFuncroleRel.setIs_valid("0");
                    tsJzFuncroleRelDao.updateFuncroleRel(tsJzFuncroleRel);
                } else {
                    tsJzFuncroleRel = new TsJzFuncroleRel();
                    tsJzFuncroleRel.setCreater(tsJzAdmin.getUser_name());
                    tsJzFuncroleRel.setFunc_id(tsJzRole.getFunctions()[a] +"");
                    tsJzFuncroleRel.setIs_valid("0");
                    tsJzFuncroleRel.setRole_id(tsJzRole.getRole_id() + "");

                    tsJzFuncroleRelDao.insertFuncroleRel(tsJzFuncroleRel);
                }
            }

            retInfo.setMark("0");
            retInfo.setTip("成功");
            LogUtils.AdminOperation(redisTemplate ,tsJzAdminOperationDao,"更新角色" + tsJzRole.getRole_name() , request);

        } catch (Exception e) {
            retInfo.setMark("-1");
            retInfo.setTip("出错了");
            logger.error("======error:" + e.toString() + "======");
            throw new RuntimeException();
        }
        logger.info("======" + logInfo + "end======");
        return retInfo;
    }


    public List<TsJzRole> findRoles(TsJzAdmin tsJzAdmin) {
        String logInfo = this.getClass().getName() + ":findRoles:";
        // 类路径+方法名
        logger.info("======" + logInfo + "begin======");
        List<TsJzRole> tsJzRoles = null;
        try {
            tsJzRoles = tsJzRoleDao.findAllRole();
        } catch (Exception e) {

            logger.error("======error:" + e.toString() + "======");
        }
        logger.info("======" + logInfo + "end======");
        return tsJzRoles;
    }


    public TsJzRole findRoleById(int role_id) {
        return tsJzRoleDao.findRoleById(role_id);
    }
}
